home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 8: LINUX Games
/
Linux Cubed Series 8 - LINUX Games.iso
/
games
/
x11
/
rpg
/
crossfir.92
/
crossfir
/
crossfire-0.92.5
/
server
/
daemon.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-24
|
3KB
|
121 lines
/*
* static char *rcsid_deamon_c =
* "$Id: daemon.c,v 1.9 1996/03/06 06:37:56 master Exp $";
*/
/*
* BecomeDaemon.c
* shamelessly swiped from xdm source code.
* Appropriate copyrights kept, and hereby follow
* ERic mehlhaff, 3/11/92
*
* xdm - display manager daemon
*
* $XConsortium: daemon.c,v 1.5 89/01/20 10:43:49 jim Exp $
*
* Copyright 1988 Massachusetts Institute of Technology
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* Author: Keith Packard, MIT X Consortium
*/
#include <global.h>
#include <sys/ioctl.h>
#ifdef hpux
#include <sys/ptyio.h>
#endif
#include <errno.h>
#include <stdio.h>
#include <sys/file.h>
FILE *BecomeDaemon (char *filename)
{
#ifdef SERVER
FILE *logfile;
register int i;
int forkresult;
if((logfile=fopen(filename,"a"))==NULL){
printf("Couldn't create logfile.\n");
exit(0);
}
fputs("\n========================\n",logfile);
fputs("Begin New Server Session\n",logfile);
fputs("========================\n\n",logfile);
fflush(logfile);
/*
* fork so that the process goes into the background automatically. Also
* has a nice side effect of having the child process get inherited by
* init (pid 1).
*/
if ( (forkresult = fork ()) ){ /* if parent */
if(forkresult < 0 ){
perror("Fork error!");
}
exit (0); /* then no more work to do */
}
/*
* Close standard file descriptors and get rid of controlling tty
*/
close (0);
close (1);
close (2);
/*
* Set up the standard file descriptors.
*/
(void) open ("/", O_RDONLY); /* root inode already in core */
(void) dup2 (0, 1);
(void) dup2 (0, 2);
if ((i = open ("/dev/tty", O_RDWR)) >= 0) { /* did open succeed? */
#if defined(SYSV) && defined(TIOCTTY)
int zero = 0;
(void) ioctl (i, TIOCTTY, &zero);
#else
#ifndef TIOCNOTTY /********* !!!!!!!!! **********/
#if defined(SVR4)
#include <sys/termios.h>
#else
#include <sys/ttycom.h>
#endif
#endif
(void) ioctl (i, TIOCNOTTY, (char *) 0); /* detach, BSD style */
#endif
(void) close (i);
}
#if defined(SYSV) || defined(SVR4)
#if defined(__sun__) || defined(hpux) || defined(sgi) || defined(__osf__)
setsid();
#else
setpgrp (0, 0);
#endif
#else /* Non SYSV machines */
#if defined(__osf__) || defined(linux)
setsid();
#else
setpgrp (0, getpid());
#endif
#endif
return(logfile);
#else
return (NULL);
#endif
}